<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en-us" lang="en-us">
<head>
  <link href="//gmpg.org/xfn/11" rel="profile">
  <meta http-equiv="content-type" content="text/html; charset=utf-8">
  <meta name="generator" content="Hugo 0.68.3" />

  
  <meta name="viewport" content="width=device-width, initial-scale=1.0">

  <title>编写测试计划和设计用例 &middot; 我的博客</title>

  
  <link type="text/css" rel="stylesheet" href="/my_technology_blog/css/print.css" media="print">
  <link type="text/css" rel="stylesheet" href="/my_technology_blog/css/poole.css">
  <link type="text/css" rel="stylesheet" href="/my_technology_blog/css/syntax.css">
  <link type="text/css" rel="stylesheet" href="/my_technology_blog/css/hyde.css">
    <link rel="stylesheet" href="https://fonts.googleapis.com/css?family=Abril+Fatface|PT+Sans:400,400i,700">


  
  <link rel="apple-touch-icon-precomposed" sizes="144x144" href="/apple-touch-icon-144-precomposed.png">
  <link rel="shortcut icon" href="/favicon.png">

  
  
</head>

  <body class="theme-base-0b ">
  <aside class="sidebar">
  <div class="container sidebar-sticky">
    <div class="sidebar-about">
      <a href="/my_technology_blog/"><h1>我的博客</h1></a>
      <p class="lead">
       杨博的博客 
      </p>
    </div>

    <nav>
      <ul class="sidebar-nav">
        <li><a href="/my_technology_blog/">Home</a> </li>
        
      </ul>
    </nav>

    <p>&copy; 2021. All rights reserved. </p>
  </div>
</aside>

    <main class="content container">
    <div class="post">
  <h1>编写测试计划和设计用例</h1>
  <time datetime=2021-04-29T20:26:37&#43;0800 class="post-date">Thu, Apr 29, 2021</time>
  <h2 id="1设计用例">1、设计用例</h2>
<p>设计用例时为了某个业务目标编写的一组由测试输入，执行条件以及预期结果的案例</p>
<p><strong>编写测试用例的几个必要条件</strong></p>
<p>用例编号(一般用项目名缩写下划线模块名缩写下划线编号)，所属模块，用例标题，优先级(一般正向测试为高，反向为中)，前置条件，输入数据，操作步骤，预期结果，实际结果，是否通过，测试人员，测试时间</p>
<p><strong>测试用例示例</strong></p>
<p><img src="image-20210505184807385.png" alt="image-20210505184807385"></p>
<hr>
<p><h3>2、编写测试用例的基本方法</h3></p>
<h3 id="21等价类划分法">2.1等价类划分法</h3>
<p><!-- raw HTML omitted -->多用在输入框<!-- raw HTML omitted --></p>
<p><strong>概念</strong>：分步骤把海量的数据的测试用例集减的很小，但过程同样有效；</p>
<p>​			等价类：某个输入域的集合，在这个输入域中每个输入条件都是等效的。一般可分为<!-- raw HTML omitted -->有效等价类<!-- raw HTML omitted -->和<!-- raw HTML omitted -->无效等价类<!-- raw HTML omitted --></p>
<p>​		有效等价类：指符合《需求规格说明书》，输入合理的数据集合</p>
<p>​		无效等价类：指不符合《需求规格说明书》，输入不合理的数据集合</p>
<p><strong>示例</strong></p>
<p><strong>示例</strong></p>
<pre><code>比如：一个青少年考试的分数（备注13-17岁为青少年）
假设青少年年龄为x,13&lt;=x&lt;=17,数学成绩为y：0&lt;=y&lt;=100 
那么年龄按照等价类划分可分为x&lt;13,13&lt;=x&lt;=17,x&gt;17,有效等价类是13&lt;=x&lt;=17，无效等价类是x&lt;13，x&gt;17
数学成绩按照等价类划分可分为y&lt;0,0&lt;=y&lt;=100,y&gt;100,有效等价类是0&lt;=y&lt;=100，无效等价类是y&lt;0，y&gt;100
</code></pre><p><h3>2.2边界值法</h3></p>
<p><!-- raw HTML omitted -->多用在有&lt;=或&gt;=<!-- raw HTML omitted --></p>
<p><strong>概念</strong>：一般边界值分析是因为程序开发循环体时的取数可能会因为&lt;,&lt;=搞错。</p>
<p>使用边界值法选取关键的原则是：边界条件，次边界条件，空值，无效数据</p>
<p><strong>确定边界值方法</strong></p>
<p><!-- raw HTML omitted -->选取正好等于、刚刚大于和刚好小于边界值的数据作为测试数据<!-- raw HTML omitted --></p>
<p><!-- raw HTML omitted -->边界值不是从每个等价类中挑一个作为代表，而是把每个等价类的边界都进行测试。<!-- raw HTML omitted --></p>
<p><strong>示例</strong></p>
<p>输入要求是1 ～ 100之间的整数，因此自然产生了1和100两个边界，我们在设计测试用例的时，要重点考虑这两个边界问题。</p>
<p><img src="image-20210505202607656.png" alt="image-20210505202607656"></p>
<p><h3>2.3因果图法</h3></p>
<p><strong>概念</strong>：因果图法比较适合<strong>输条件比较多的情况</strong>，测<strong>试所有的输入条件的排列组合</strong>。所谓的原因就是输入，所谓的结果就是输出。</p>
<p><strong>因果图基本图形符号</strong>：</p>
<p>恒等：若原因出现，则结果出现；若原因不出现，则结果不出现。</p>
<p>非（～）：若原因出现，则结果不出现；若原因不出现，则结果出现。</p>
<p>或（∨）：若几个原因中有一个出现，则结果出现；若几个原因都不出现，则结果不出现。</p>
<p>与（∧）：若几个原因都出现，结果才出现；若其中有一个原因不出现，则结果不出现。</p>
<p><strong>因果图的约束符号</strong>：</p>
<p>E（互斥）：表示两个原因不会同时成立，两个中最多有一个可能成立</p>
<p>I（包含）：表示三个原因中至少有一个必须成立</p>
<p>O（惟一）：表示两个原因中必须有一个，且仅有一个成立</p>
<p>R（要求）：表示两个原因，a出现时，b也必须出现，a出现时，b不可能不出现</p>
<p>M（屏蔽）：两个结果，a为1时，b必须是0，当a为0时，b值不定</p>
<p><strong>示例</strong>：</p>
<p>例如：有一个处理单价为2.5元的盒装饮料的自动售货机软件。若投入2.5元硬币，按“可乐”、“啤酒”、或“奶茶”按钮，相应的饮料就送出来。若投入的是3元硬币，在送出饮料的同时退还5角硬币。</p>
<p>分析这一段说明，我们可列出原因和结果</p>
<p>原因(输入)：</p>
<p>投入2.5元硬币；</p>
<p>投入3元；</p>
<p>按“可乐”按钮；</p>
<p>按“啤酒”按钮；</p>
<p>按“奶茶”按钮。</p>
<p>中间状态： ① 已投币；②已按钮</p>
<p>结果(输出)：</p>
<p>退还5角硬币；</p>
<p>送出“可乐”饮料；</p>
<p>送出“啤酒”饮料；</p>
<p>送出“奶茶”饮料；</p>
<h3 id="判定表法">判定表法</h3>
<p><img src="image-20210506183449979.png" alt="image-20210506183449979"></p>
<p><img src="image-20210506183500687.png" alt="image-20210506183500687"></p>
<p><h3>2.4.场景法</h3></p>
<p><strong>测试用例设计的思想</strong></p>
<p>现在的软件几乎都是用事件触发来控制流程的，事件触发时的情景便形成了场景，而同一事件不同的触发顺序和处理结果就形成事件流。这种在软件设计方面的思想也可以引入到软件测试中，可以比较生动地描绘出事件触发时的情景，有利于测试设计者设计测试用例，同时使测试用例更容易理解和执行。</p>
<p>用例场景是通过描述流经用例的路径来确定的过程，</p>
<p>这个流经过程要从用例开始到结束遍历其中所有基本流和备选流。</p>
<p><img src="image-20210506183738052.png" alt="image-20210506183738052"></p>
<p>遵循上图中每个经过用例的可能路径，可以确定不同的用例场景。从基本流开始，再将基本流和备选流结合起来，可以确定以下用例场景：</p>
<p><img src="image-20210506183752365.png" alt="image-20210506183752365"></p>
<p>基本流和备选流的区别</p>
<p><img src="image-20210506183944039.png" alt="image-20210506183944039"></p>
<p><strong>银行案例ATM:</strong></p>
<p>个人标识号 (PIN＝personal identification number )，用于保护智能卡免受误用的秘密标识代码。PIN 与密码类似，只有卡的所有者才知道该 PIN。只有拥有该智能卡并知道 PIN 的人才能使用该智能卡</p>
<p><img src="image-20210506184129434.png" alt="image-20210506184129434"></p>
<p>第一次测试中，根据测试计划，我们需要核实提款用例已经正确地实施。此时尚未实施整个用例，只实施了下面的事件流：</p>
<p>基本流-提取预设金额（100 元、200元、500元、1000元）</p>
<p>备选流2 - ATM 内没有现金</p>
<p>备选流3 - ATM 内现金不足</p>
<p>备选流4 - PIN 有误</p>
<p>备选流5 - 帐户不存在/帐户类型有误</p>
<p>备选流6 - 帐面金额不足</p>
<p><img src="image-20210506184239403.png" alt="image-20210506184239403"></p>
<p>对于这7个场景中的每一个场景都需要确定测试用例。可以采用矩阵或决策表来确定和管理测试用例。</p>
<p>从确定执行用例场景所需的数据元素入手构建矩阵。然后，对于每个场景，至少要确定包含执行场景所需的适当条件的测试用例。</p>
<p>​     下面显示了一种通用格式，其中各行代表各个测试用例，而各列则代表测试用例的信息。</p>
<p>​     本示例中，对于每个测试用例，存在一个测试用例ID、条件（或说明）、测试用例中涉及的所有数据元素（作为输入或已经存在于数据库中）以及预期结果。</p>
<p><img src="image-20210506184310870.png" alt="image-20210506184310870"></p>
<h3 id="25-错误推测法">2.5 错误推测法</h3>
<p>错误推测法：根据经验或直觉推测程序中可能存在的各种错误，从而有针对性地编写检查这些错误的测试用例的黑盒测试方法</p>
<p>例如，测试手机终端的通话功能，可以设计各种通话失败的情况来补充测试用 例：</p>
<ol>
<li>
<p>无SIM 卡插入时进行呼出（非紧急呼叫）</p>
</li>
<li>
<p>插入已欠费SIM卡进行呼出</p>
</li>
<li>
<p>射频器件损坏或无信号区域插入有效SIM卡呼出</p>
</li>
<li>
<p>网络正常，插入有效SIM卡，呼出无效号码（如1、888、333333、不输入任何号码等）</p>
</li>
<li>
<p>网络正常，插入有效SIM卡，使用“快速拨号”功能呼出设置无效号码的数字</p>
</li>
</ol>
<p>技巧：最重要的是要思考和分析测试对象的各个方面，多参考以前发现的bug的相关数据，总结的经验，个人多考虑异常的情况、反面的情况、特殊的输入，以一个攻击者的态度对待程序，就能设计出比较完善的测试用例来。</p>
<h3 id="26正交表法">2.6正交表法</h3>
<p>正交表能够在因素变化范围内均衡抽样，使每次试验都具有较强的代表性，由于正交表具备均衡分散的特点，保证了全面实验的某些要求，这些试验往往能够较好或更好的达到实验的目的。<a href="https://baike.baidu.com/item/%E6%AD%A3%E4%BA%A4%E5%AE%9E%E9%AA%8C%E8%AE%BE%E8%AE%A1">正交实验设计</a>包括两部分内容：第一，是怎样安排实验；第二，是怎样分析实验结果。</p>
<p>应用场景：在一个界面中有多个控件，每个控件有多个取值，控件之间可以相互组合，不可能（也没有必要）为每一种组合编写一条用例，如何使用最少最优的组合进行测试。——正交排列法</p>
<p>判定表，因果图也是考虑控件组合，但是组合数量较少（一般不会超过20中）</p>
<p>公式:</p>
<p><img src="image-20210506185050877.png" alt="image-20210506185050877"></p>
<p><img src="image-20210506185104533.png" alt="image-20210506185104533"></p>
<p><img src="image-20210506185114657.png" alt="image-20210506185114657"></p>
<p><img src="image-20210506185138301.png" alt="image-20210506185138301"></p>
<p>正交表查询地址：<a href="https://www.york.ac.uk/depts/maths/tables/orthogonal.htm">https://www.york.ac.uk/depts/maths/tables/orthogonal.htm</a> </p>
<p>正交排列法：<a href="http://support.sas.com/techsup/technote/ts723_Designs.txt">http://support.sas.com/techsup/technote/ts723_Designs.txt</a> </p>
<p>正交表测试用例设计方法的特点是什么？</p>
<p>1、用最少的实验覆盖最多的操作，测试用例设计很少，效率高，但是很复杂；</p>
<p>2、对于基本的验证功能，以及二次集成引起的缺陷，一般都能找出来；但是更深的缺陷，更复杂的缺陷，还是无能为力的；</p>
<p>3、体的环境下，正交表一般都很难做的。大多数，只在系统测试的时候使用此方法。</p>
<h2><!-- raw HTML omitted --><font color="red">面试常见</font><!-- raw HTML omitted --></h2>
<p><h3>1、测试计划、测试用例、测试报告的区别</h3></p>
<p><strong>测试用例</strong>包括用例编号、所属模块、所属模块、操作步骤、前置条件、输入数据、预期结果、实际结果、是否通过、测试人员、测试时间</p>
<p><strong>测试计划</strong>包括确定测试范围、指定测试策略、测试资源人员的分配、时间安排、风险分析</p>
<p><strong>测试报告</strong>包括测试计划、测试依据、测试范围、测试环境、测试进度、执行结果、缺陷分析、遗留缺陷、测试结论、建议、附录等</p>

</div>


    </main>

    
  </body>
</html>
